JasmineJS এর বেসিক টেস্ট স্ট্রাকচার

জ্যাসমিনজেএস (JasmineJS) - Web Development

304

JasmineJS এর টেস্ট স্ট্রাকচার খুবই সহজ এবং সুসংগঠিত। এর মধ্যে কিছু মৌলিক ফাংশন রয়েছে যা টেস্ট কেসগুলোকে সংগঠিত করে এবং টেস্টের লজিককে পরিস্কার রাখে। JasmineJS এ টেস্ট লেখার সময় সাধারণত describe(), it(), এবং expect() ফাংশনগুলো ব্যবহার করা হয়। এই ফাংশনগুলির মাধ্যমে টেস্ট কেসগুলো গঠন করা হয়।


বেসিক টেস্ট স্ট্রাকচারের উপাদান

JasmineJS এর একটি বেসিক টেস্ট স্ট্রাকচার দেখানো হল:

describe("Function/Feature Name", function() {
  
  it("should perform a specific behavior", function() {
    // Test code here
    expect(actualValue).toBe(expectedValue);
  });

  it("should handle edge cases correctly", function() {
    // Test code for edge case
    expect(actualValue).toBe(expectedValue);
  });

});

এখানে:

  • describe(): এটি টেস্টের একটি গোষ্ঠী বা একটি ফিচার বর্ণনা করে। সাধারণত একটি ফাংশন বা একটি কার্যকারিতা (feature) পরীক্ষা করার জন্য describe() ব্যবহার করা হয়।
  • it(): এটি একটি নির্দিষ্ট টেস্ট কেসের বর্ণনা দেয়। সাধারণত এটি পরীক্ষা করা আচরণ বা ফলাফল বর্ণনা করে।
  • expect(): এটি একটি অ্যাসারশন তৈরি করে এবং পরীক্ষা করে যে কোডটি প্রত্যাশিত আচরণ অনুসরণ করছে কিনা। toBe(), toEqual() ইত্যাদি পদ্ধতি ব্যবহার করা হয়।

টেস্ট স্ট্রাকচারের ব্যাখ্যা

describe() ফাংশন

describe() ফাংশনটি টেস্টের একটি গোষ্ঠী তৈরি করে। এটি সাধারণত একটি ফিচার, ফাংশন, বা মডিউল বর্ণনা করতে ব্যবহৃত হয়। এর মধ্যে একাধিক it() ব্লক থাকতে পারে, যা আলাদা আলাদা টেস্ট কেস।

describe("sum function", function() {
  // টেস্ট কেসগুলো এখানে থাকবে
});

it() ফাংশন

it() ফাংশনটি একটি নির্দিষ্ট টেস্ট কেস বর্ণনা করে। এখানে আপনি যা পরীক্ষা করতে চান সেটি উল্লেখ করবেন, যেমন একটি নির্দিষ্ট আচরণ বা ফলাফল।

it("should add two numbers correctly", function() {
  const sum = 2 + 3;
  expect(sum).toBe(5);  // এখানে আসল আউটপুট 'sum' পরীক্ষা করা হচ্ছে
});

expect() ফাংশন

expect() ফাংশনটি একটি অ্যাসারশন তৈরি করে। এটি আপনার কোডের আউটপুট (যেমন একটি মান বা অবস্থা) প্রত্যাশিত আউটপুটের সাথে তুলনা করে।

expect(sum).toBe(5);  // এখানে 'sum' এর মান ৫ হওয়ার প্রত্যাশা করা হচ্ছে

expect() এর মাধ্যমে বিভিন্ন অ্যাসারশন করা যেতে পারে, যেমন:

  • toBe(): মানের সঠিকতা পরীক্ষা করতে।
  • toEqual(): অবজেক্ট বা অ্যারে পরীক্ষা করতে।
  • toBeTruthy() / toBeFalsy(): একটি মান সত্য বা মিথ্যা কিনা তা পরীক্ষা করতে।
  • toContain(): একটি অ্যারে বা স্ট্রিংয়ে কিছু রয়েছে কিনা পরীক্ষা করতে।

একটি সম্পূর্ণ বেসিক টেস্ট উদাহরণ

describe("sum function", function() {
  
  it("should add two positive numbers correctly", function() {
    const sum = 2 + 3;
    expect(sum).toBe(5);  // ২ এবং ৩ যোগ করলে ৫ আসবে
  });

  it("should return a negative number if the sum is negative", function() {
    const sum = -2 + -3;
    expect(sum).toBe(-5);  // -২ এবং -৩ যোগ করলে -৫ আসবে
  });

  it("should return zero when both numbers are zero", function() {
    const sum = 0 + 0;
    expect(sum).toBe(0);  // ০ এবং ০ যোগ করলে ০ আসবে
  });
});

এখানে:

  • প্রথম it() ব্লকটি যাচাই করছে যে ২ এবং ৩ যোগ করলে ৫ হবে।
  • দ্বিতীয় it() ব্লকটি যাচাই করছে যে -২ এবং -৩ যোগ করলে -৫ হবে।
  • তৃতীয় it() ব্লকটি যাচাই করছে যে ০ এবং ০ যোগ করলে ০ হবে।

beforeEach() এবং afterEach() ব্যবহার

JasmineJS এ beforeEach() এবং afterEach() ফাংশনগুলিও ব্যবহৃত হয়, যা প্রতিটি টেস্ট কেসের আগে বা পরে কিছু কোড এক্সিকিউট করতে সহায়তা করে।

  • beforeEach(): এটি প্রতিটি টেস্ট কেসের আগে রান করবে।
  • afterEach(): এটি প্রতিটি টেস্ট কেসের পরে রান করবে।
describe("Test suite for calculator", function() {
  let calc;

  beforeEach(function() {
    calc = new Calculator();  // প্রতিটি টেস্ট কেসের আগে নতুন Calculator তৈরি
  });

  it("should add two numbers correctly", function() {
    expect(calc.add(2, 3)).toBe(5);
  });

  it("should subtract numbers correctly", function() {
    expect(calc.subtract(5, 3)).toBe(2);
  });

  afterEach(function() {
    // প্রতিটি টেস্ট কেসের পরে কিছু পরিস্কার করার কাজ
    console.log("Test finished");
  });
});

এখানে:

  • beforeEach() প্রতিটি টেস্ট কেসের আগে Calculator ক্লাসের একটি নতুন ইনস্ট্যান্স তৈরি করছে।
  • afterEach() প্রতিটি টেস্ট কেসের পরে একটি মেসেজ লগ করছে।

সারাংশ

JasmineJS এর বেসিক টেস্ট স্ট্রাকচারটি খুবই সরল এবং বুঝতে সহজ। এখানে describe() দিয়ে টেস্টের একটি গোষ্ঠী তৈরি করা হয়, it() দিয়ে নির্দিষ্ট টেস্ট কেস লেখা হয় এবং expect() দিয়ে টেস্টের ফলাফল যাচাই করা হয়। beforeEach() এবং afterEach() এর মাধ্যমে টেস্টের আগে বা পরে অতিরিক্ত কার্যক্রম চালানো যায়।

এই স্ট্রাকচারটি ব্যবহার করে আপনি খুব সহজে এবং পরিষ্কারভাবে আপনার কোডের বৈশিষ্ট্য এবং আচরণ পরীক্ষা করতে পারবেন।

Content added By

JasmineJS এ টেস্ট লেখার সময় describe() এবং it() ব্লক দুটি মৌলিক উপাদান। এগুলোর মাধ্যমে আপনি আপনার টেস্ট কেসগুলোকে সংগঠিত করতে পারেন এবং প্রতিটি টেস্টের আচরণ বা ফলাফল বর্ণনা করতে পারেন। এই দুটি ব্লক কিভাবে কাজ করে তা বিস্তারিতভাবে নিচে ব্যাখ্যা করা হলো।


describe() ব্লক

describe() ব্লকটি একটি টেস্টের গোষ্ঠী বা ফিচার বর্ণনা করে। এটি সাধারণত একটি নির্দিষ্ট ফাংশন, মডিউল বা ফিচারের পরীক্ষা করার জন্য ব্যবহৃত হয়। এর মধ্যে আপনি একাধিক it() ব্লক রাখতে পারেন, যা আলাদা আলাদা টেস্ট কেস।

describe() ব্লকের কাঠামো:

describe("Function/Feature Name", function() {
  // এখানে এক বা একাধিক it() ব্লক থাকবে
});
  • ফাংশন বা ফিচারের নাম: আপনি এখানে যেটি পরীক্ষা করতে চান সেটি উল্লেখ করবেন, যেমন ফাংশন, মডিউল বা কোডের কোনো অংশ।
  • বর্ণনা: describe() ব্লকের ভিতরে আপনার টেস্ট কেসগুলোর বিষয়ে সংক্ষিপ্ত বর্ণনা থাকতে পারে।

উদাহরণ:

describe("sum function", function() {
  // এই describe ব্লকের মধ্যে sum ফাংশনের পরীক্ষা করা হবে
});

এখানে, describe() ব্লকটি sum function এর জন্য একটি টেস্ট গোষ্ঠী তৈরি করেছে। এর মধ্যে একাধিক it() ব্লক থাকতে পারে, যেখানে আলাদা আলাদা টেস্ট কেস থাকবে।


it() ব্লক

it() ব্লকটি একটি নির্দিষ্ট টেস্ট কেস বর্ণনা করে। এটি যেকোনো নির্দিষ্ট আচরণ বা কার্যকারিতা পরীক্ষা করে। সাধারণত it() এর মধ্যে আপনি যা যাচাই করতে চান তা লিখবেন।

it() ব্লকের কাঠামো:

it("should perform a specific behavior", function() {
  // টেস্ট কোড এখানে থাকবে
});
  • বর্ণনা: এখানে আপনি টেস্ট কেসটি কী করছে তা বর্ণনা করবেন। এটি সাধারণত একটি প্রত্যাশিত আচরণ বা ফলাফল বর্ণনা করে, যেমন “এই ফাংশন দুটি সংখ্যা যোগ করবে।”

উদাহরণ:

describe("sum function", function() {
  it("should add two numbers correctly", function() {
    const sum = 2 + 3;
    expect(sum).toBe(5);  // এখানে ২ এবং ৩ যোগ করলে ফলাফল ৫ হবে
  });
});

এখানে:

  • describe() ব্লকটি sum function পরীক্ষা করছে।
  • it() ব্লকটি পরীক্ষা করছে যে ২ এবং ৩ যোগ করলে ফলাফল ৫ হবে কিনা।

describe() এবং it() এর সম্পর্ক

  • describe() ব্লকটি এক বা একাধিক it() ব্লক ধারণ করে।
  • describe() ব্লকটি টেস্টের গোষ্ঠী বা ফিচার বর্ণনা করে, যেখানে it() ব্লকগুলো নির্দিষ্ট টেস্ট কেসগুলো বর্ণনা করে।

উদাহরণ:

describe("multiply function", function() {
  it("should multiply two positive numbers correctly", function() {
    const result = 2 * 3;
    expect(result).toBe(6);
  });

  it("should return a negative number if one number is negative", function() {
    const result = -2 * 3;
    expect(result).toBe(-6);
  });
});

এখানে:

  • প্রথম it() ব্লকটি যাচাই করছে যে দুটি ধনাত্মক সংখ্যা গুণ করলে ফলাফল সঠিক হবে।
  • দ্বিতীয় it() ব্লকটি যাচাই করছে যে একটি ঋণাত্মক সংখ্যা গুণ করলে ফলাফল ঋণাত্মক হবে।

beforeEach() এবং afterEach() এর সাথে ব্যবহার

describe() ব্লকটির সাথে আপনি beforeEach() এবং afterEach() ব্যবহার করতে পারেন, যা প্রতিটি টেস্ট কেসের আগে বা পরে কোড এক্সিকিউট করে। এটি বিশেষভাবে উপকারী যখন আপনি কিছু কমন সেটআপ বা টিয়ারডাউন করতে চান।

উদাহরণ:

describe("calculator", function() {
  let calc;

  beforeEach(function() {
    calc = new Calculator();  // প্রতিটি টেস্টের আগে নতুন একটি Calculator তৈরি হবে
  });

  it("should add two numbers correctly", function() {
    expect(calc.add(2, 3)).toBe(5);
  });

  it("should subtract two numbers correctly", function() {
    expect(calc.subtract(5, 3)).toBe(2);
  });

  afterEach(function() {
    // প্রতিটি টেস্টের পরে কিছু কোড এক্সিকিউট হতে পারে
  });
});

এখানে:

  • beforeEach(): এটি প্রতিটি টেস্ট কেসের আগে Calculator এর একটি নতুন ইনস্ট্যান্স তৈরি করছে।
  • it(): প্রতিটি it() ব্লক একটি নির্দিষ্ট ফাংশন বা আচরণ পরীক্ষা করছে।

সারাংশ

  • describe(): এটি টেস্টের একটি গোষ্ঠী বা ফিচার বর্ণনা করে। এটি একটি বড় টেস্ট সেট বা মডিউলকে বিভিন্ন ছোট ছোট টেস্ট কেসে ভাগ করতে সহায়তা করে।
  • it(): এটি একটি নির্দিষ্ট টেস্ট কেস বর্ণনা করে। এখানে আপনি যা পরীক্ষা করতে চান তা উল্লেখ করবেন, যেমন একটি নির্দিষ্ট আচরণ বা আউটপুট।

এই দুটি ফাংশন আপনাকে পরিষ্কারভাবে টেস্ট কেসগুলো সংগঠিত করতে সহায়তা করে এবং টেস্টিং প্রক্রিয়াকে আরো বুঝতে সহজ করে তোলে।

Content added By

JasmineJS এ টেস্টিং প্রক্রিয়া দুটি প্রধান উপাদানে ভাগ করা যায়: Test Suites এবং Test Cases। এগুলি আপনার কোডের আচরণ যাচাই করার জন্য একটি সংগঠিত এবং কার্যকরী পদ্ধতি প্রদান করে। নিচে এগুলোর ব্যাখ্যা দেয়া হলো।


Test Suite

Test Suite (টেস্ট স্যুইট) হলো এক বা একাধিক টেস্ট কেসের একটি গোষ্ঠী। এটি সাধারণত একটি নির্দিষ্ট ফাংশন, মডিউল বা বৈশিষ্ট্য পরীক্ষা করার জন্য ব্যবহৃত হয়। Test Suite গঠন করতে আমরা describe() ফাংশন ব্যবহার করি, যা টেস্টের একটি গোষ্ঠী বা ফিচার বর্ণনা করে। এই গোষ্ঠীর মধ্যে একাধিক it() ফাংশন (Test Cases) থাকতে পারে।

Test Suite এর কাঠামো:

describe("Test Suite Name", function() {
  // এক বা একাধিক it() ব্লক থাকবে
});
  • Test Suite Name: এখানে আপনি যেটি পরীক্ষা করতে চান (যেমন একটি ফাংশন বা মডিউল) তার নাম উল্লেখ করবেন।
  • it() ব্লক: Test Suite এর মধ্যে নির্দিষ্ট টেস্ট কেস থাকবে, যা it() ফাংশন দ্বারা নির্দিষ্ট হবে।

উদাহরণ:

describe("sum function", function() {
  it("should add two numbers correctly", function() {
    const sum = 2 + 3;
    expect(sum).toBe(5);  // ২ এবং ৩ যোগ করলে ৫ হবে
  });

  it("should return 0 if both numbers are 0", function() {
    const sum = 0 + 0;
    expect(sum).toBe(0);  // ০ এবং ০ যোগ করলে ০ হবে
  });
});

এখানে, describe() ব্লকটি sum function নামে একটি Test Suite তৈরি করেছে, যার মধ্যে দুটি Test Case রয়েছে যা it() ব্লক দ্বারা বর্ণিত।


Test Case

Test Case (টেস্ট কেস) হলো একটি নির্দিষ্ট আউটপুট বা আচরণ যাচাই করার জন্য একটি টেস্ট। এটি মূলত একটি একক কার্যক্রমের জন্য পরীক্ষা হয়, যেমন একটি ফাংশন কি সঠিকভাবে কাজ করছে কিনা। JasmineJS এ it() ফাংশনটি Test Case তৈরি করতে ব্যবহৃত হয়। এখানে আপনি টেস্টের আচরণ বর্ণনা করবেন এবং expect() ফাংশন দ্বারা পরীক্ষার ফলাফল যাচাই করবেন।

Test Case এর কাঠামো:

it("should perform a specific behavior", function() {
  // টেস্ট কোড এখানে থাকবে
});
  • it() ব্লক: এখানে আপনি টেস্টের বর্ণনা দেবেন (যেমন "এই ফাংশন দুটি সংখ্যা যোগ করবে") এবং সেই আচরণ পরীক্ষা করবেন।

উদাহরণ:

describe("multiply function", function() {
  it("should multiply two numbers correctly", function() {
    const result = 2 * 3;
    expect(result).toBe(6);  // ২ এবং ৩ গুণ করলে ৬ আসবে
  });

  it("should return a negative result when multiplying a positive and negative number", function() {
    const result = -2 * 3;
    expect(result).toBe(-6);  // -২ এবং ৩ গুণ করলে -৬ আসবে
  });
});

এখানে:

  • প্রথম it() ব্লকটি যাচাই করছে যে, ২ এবং ৩ গুণ করলে ৬ আসবে।
  • দ্বিতীয় it() ব্লকটি যাচাই করছে যে, একটি ধনাত্মক এবং একটি ঋণাত্মক সংখ্যা গুণ করলে ফলাফল ঋণাত্মক হবে।

Test Suite এবং Test Case এর মধ্যে পার্থক্য

বিষয়Test SuiteTest Case
সংজ্ঞাএক বা একাধিক টেস্ট কেসের একটি গোষ্ঠী।একটি নির্দিষ্ট আউটপুট বা আচরণ যাচাই করার জন্য একটি টেস্ট।
ব্যবহারফিচার বা মডিউল বর্ণনা করতে ব্যবহৃত হয়।একটি নির্দিষ্ট ফাংশন বা আচরণ পরীক্ষা করতে ব্যবহৃত হয়।
নির্দেশকdescribe() ফাংশন দ্বারা তৈরি হয়।it() ফাংশন দ্বারা তৈরি হয়।
সংগঠনএকাধিক টেস্ট কেসের মধ্যে গোষ্ঠী গঠন করা হয়।একটি একক টেস্ট কেস হিসাবে কাজ করে।

উদাহরণ: Test Suite এবং Test Case এর সমন্বয়

describe("calculator", function() {
  let calc;

  beforeEach(function() {
    calc = new Calculator();  // প্রতিটি টেস্টের আগে Calculator তৈরি হবে
  });

  it("should add two numbers correctly", function() {
    expect(calc.add(2, 3)).toBe(5);  // ২ এবং ৩ যোগ করলে ৫ হবে
  });

  it("should subtract two numbers correctly", function() {
    expect(calc.subtract(5, 3)).toBe(2);  // ৫ থেকে ৩ বাদ দিলে ২ আসবে
  });

  afterEach(function() {
    calc = null;  // টেস্টের পরে Calculator অবজেক্ট পরিষ্কার করা হবে
  });
});

এখানে:

  • Test Suite: describe() ব্লকটি calculator মডিউল পরীক্ষা করছে।
  • Test Cases: দুটি it() ব্লক টেস্ট কেস হিসেবে কাজ করছে:
    • প্রথমটি যোগফল পরীক্ষা করছে।
    • দ্বিতীয়টি বিয়োগফল পরীক্ষা করছে।

সারাংশ

  • Test Suite: এটি এক বা একাধিক টেস্ট কেসের একটি গোষ্ঠী। JasmineJS এ, describe() ফাংশন দিয়ে এটি তৈরি হয় এবং এটি একটি নির্দিষ্ট ফিচার বা মডিউল পরীক্ষা করে।
  • Test Case: এটি একটি নির্দিষ্ট আচরণ বা আউটপুট যাচাই করার জন্য একটি একক টেস্ট। it() ফাংশন দিয়ে এটি তৈরি হয় এবং এটি যাচাই করে যে একটি ফাংশন বা কার্যকারিতা সঠিকভাবে কাজ করছে কিনা।
Content added By

JasmineJS দিয়ে Test Cases (টেস্ট কেস) লিখা খুবই সহজ এবং কার্যকরী। JasmineJS এর টেস্ট কেসগুলো describe() এবং it() ফাংশন ব্যবহার করে লেখা হয়, যেখানে describe() টেস্টের গোষ্ঠী বা ফিচার বর্ণনা করে এবং it() নির্দিষ্ট টেস্ট কেসের মধ্যে আসল পরীক্ষাটি পরিচালনা করে। এখানে আমরা JasmineJS এ টেস্ট কেস লেখার মৌলিক পদ্ধতি এবং কয়েকটি উদাহরণ দেখাব।


Test Case লিখার মৌলিক কাঠামো

JasmineJS এ একটি টেস্ট কেসের সাধারণ কাঠামো হলো:

describe("Function/Feature Name", function() {
  
  it("should perform a specific behavior", function() {
    // এখানে টেস্ট কোড থাকবে
    expect(actualValue).toBe(expectedValue);
  });

});

এখানে:

  • describe(): এটি একটি ফিচার বা ফাংশনের টেস্ট গোষ্ঠী বর্ণনা করে।
  • it(): এটি একটি নির্দিষ্ট টেস্ট কেসের বর্ণনা দেয়, যা একটি নির্দিষ্ট আচরণ বা ফলাফল পরীক্ষা করে।
  • expect(): এটি একটি অ্যাসারশন তৈরি করে এবং পরীক্ষার ফলাফল যাচাই করে।

Test Case লেখার পদ্ধতি

  1. ফিচার বা ফাংশন বর্ণনা
    প্রথমে আপনি যে ফাংশন বা ফিচার পরীক্ষা করবেন, সেটির নাম বা বর্ণনা describe() ব্লকে দেবেন। এটি সাধারণত একটি কোড ফিচার বা মডিউল হবে, যার কার্যকারিতা আপনি যাচাই করতে চান।
  2. টেস্ট কেস নির্ধারণ
    এরপর it() ব্লকে নির্দিষ্ট টেস্ট কেসটি লিখবেন। এটি বর্ণনা করবে আপনি কী যাচাই করতে চান, যেমন—একটি ফাংশন সঠিকভাবে কাজ করছে কিনা বা একটি ফলাফল প্রত্যাশিত কিনা।
  3. টেস্ট কোড লেখুন
    it() ব্লকের ভিতরে আপনি সেই কোডটি লিখবেন যা পরীক্ষিত হবে। এখানে expect() ব্যবহার করে অ্যাসারশন করবেন, যেমন কী যাচাই করতে চান—ফাংশনটি সঠিকভাবে কাজ করছে কিনা বা কোনো ভ্যালু প্রত্যাশিত মানের সাথে মেলে কিনা।

উদাহরণ ১: দুইটি সংখ্যা যোগ করা

describe("sum function", function() {

  it("should add two positive numbers correctly", function() {
    const sum = 2 + 3;
    expect(sum).toBe(5);  // ২ এবং ৩ যোগ করলে ৫ হবে
  });

});

এখানে:

  • describe() ব্লকটি sum function এর টেস্ট গোষ্ঠী তৈরি করছে।
  • it() ব্লকটি যাচাই করছে যে, 2 + 3 যোগ করলে ৫ হবে কিনা।
  • expect() ব্লকটি যাচাই করছে যে, sum এর মান ৫ হতে হবে।

উদাহরণ ২: একটি অ্যারের মান পরীক্ষা করা

describe("Array operations", function() {

  it("should contain a specific number", function() {
    const numbers = [1, 2, 3, 4];
    expect(numbers).toContain(3);  // অ্যারেতে ৩ থাকতে হবে
  });

});

এখানে:

  • describe() ব্লকটি Array operations ফিচারটি পরীক্ষা করছে।
  • it() ব্লকটি যাচাই করছে যে, numbers অ্যারেতে ৩ আছে কিনা।
  • expect() ব্লকটি যাচাই করছে যে numbers অ্যারেতে 3 রয়েছে।

উদাহরণ ৩: একটি ফাংশনের ভুল ইনপুট চেক করা

describe("multiply function", function() {

  it("should return NaN when multiplying by a string", function() {
    const result = 2 * "hello";
    expect(result).toBeNaN();  // গুনফল NaN (Not-a-Number) হওয়া উচিত
  });

});

এখানে:

  • describe() ব্লকটি multiply function পরীক্ষা করছে।
  • it() ব্লকটি যাচাই করছে যে, সংখ্যা এবং স্ট্রিং গুণ করলে ফলাফল NaN হবে।
  • expect() ব্লকটি যাচাই করছে যে, result NaN হতে হবে।

beforeEach() এবং afterEach() ব্যবহার

আপনি beforeEach() এবং afterEach() ফাংশন ব্যবহার করে টেস্ট কেসের আগে বা পরে কিছু কোড এক্সিকিউট করতে পারেন। এগুলো বিশেষভাবে উপকারী যখন একাধিক টেস্ট কেসের জন্য কমন সেটআপ বা টিয়ারডাউন করা প্রয়োজন হয়।

উদাহরণ:

describe("Calculator", function() {
  let calc;

  beforeEach(function() {
    calc = new Calculator();  // প্রতিটি টেস্ট কেসের আগে Calculator তৈরি হবে
  });

  it("should add two numbers correctly", function() {
    expect(calc.add(2, 3)).toBe(5);
  });

  it("should subtract numbers correctly", function() {
    expect(calc.subtract(5, 3)).toBe(2);
  });

  afterEach(function() {
    // টেস্ট কেসের পর যে কোনো পরিস্কার বা লোগিং কার্যক্রম
    console.log("Test finished");
  });
});

এখানে:

  • beforeEach(): প্রতিটি টেস্ট কেসের আগে নতুন একটি Calculator ইনস্ট্যান্স তৈরি হবে।
  • afterEach(): প্রতিটি টেস্ট কেসের পরে একটি লগ মেসেজ দেখানো হবে।

বিশেষ টেস্ট অ্যাসারশন

JasmineJS এ বিভিন্ন ধরনের অ্যাসারশন ব্যবহার করা হয়, যেমন:

  • toBe(): সঠিক মান পরীক্ষা করে।
  • toEqual(): অবজেক্ট বা অ্যারের মান পরীক্ষা করে।
  • toContain(): অ্যারে বা স্ট্রিংয়ে কিছু উপস্থিত কিনা পরীক্ষা করে।
  • toBeTruthy() / toBeFalsy(): মানটি সত্য বা মিথ্যা কিনা পরীক্ষা করে।
  • toThrow(): একটি ফাংশন কোন ত্রুটি (error) ফেলে কিনা পরীক্ষা করে।

উদাহরণ:

describe("Error handling", function() {

  it("should throw an error when dividing by zero", function() {
    function divide() {
      return 1 / 0;
    }
    expect(divide).toThrow();  // এই ফাংশনটি ত্রুটি (error) ফেলবে
  });

});

সারাংশ

JasmineJS দিয়ে টেস্ট কেস লেখার পদ্ধতি খুবই সরল:

  1. describe() ব্লকের মধ্যে ফিচার বা ফাংশনের নাম দিয়ে টেস্ট গোষ্ঠী তৈরি করা হয়।
  2. it() ব্লকের মধ্যে নির্দিষ্ট টেস্ট কেস লেখা হয়, যেখানে আপনি যে আচরণ বা ফলাফল পরীক্ষা করতে চান তা উল্লেখ করেন।
  3. expect() ফাংশনের মাধ্যমে অ্যাসারশন করা হয়, যা পরীক্ষার ফলাফল যাচাই করে।
Content added By

JasmineJS টেস্টিং ফ্রেমওয়ার্কে Assertions এবং Matchers খুবই গুরুত্বপূর্ণ উপাদান। এগুলি টেস্ট কেসের ফলাফল যাচাই করতে ব্যবহৃত হয়। Jasmine এর expect() ফাংশন ব্যবহার করে আমরা Assertions তৈরি করি, এবং Matchers দ্বারা আমরা টেস্ট কেসে দেয়া মানের সাথে তুলনা করে যাচাই করি।


Assertions এবং Matchers কি?

  • Assertion: এটি একটি বিবৃতি বা চেক যা নির্ধারণ করে যে কোনো শর্ত পূর্ণ হচ্ছে কি না। যদি শর্ত পূর্ণ হয়, তাহলে টেস্টটি পাস করবে; অন্যথায়, এটি ফেল হবে। Jasmine এ Assertions সাধারণত expect() ফাংশনের মাধ্যমে করা হয়।
  • Matcher: এটি একটি বিশেষ ধরনের ফাংশন যা expect() এর সাথে ব্যবহার করা হয়। Matchers মানের সাথে তুলনা করে এবং নিশ্চিত করে যে সেটি প্রত্যাশিত আচরণ করছে কি না। Jasmine এ অনেক ধরনের matcher রয়েছে, যেমন toBe(), toEqual(), toBeTruthy(), toContain() ইত্যাদি।

expect() ফাংশন

JasmineJS এ Assertions তৈরি করতে expect() ফাংশন ব্যবহার করা হয়। এর মাধ্যমে আপনি একটি মান বা অবস্থা যাচাই করতে পারেন।

expect(actualValue).matcher(expectedValue);

এখানে:

  • actualValue: এটি হলো সেই মান বা অবস্থা যা আপনি যাচাই করতে চান।
  • matcher: এটি হলো Matcher ফাংশন (যেমন toBe(), toEqual(), toContain() ইত্যাদি) যা যাচাই করবে যে actualValue প্রত্যাশিত মানের সাথে মেলে কিনা।
  • expectedValue: এটি হলো আপনি যেটি প্রত্যাশা করছেন।

Matchers এর ধরণ

JasmineJS এ অনেক ধরনের matcher রয়েছে, যেগুলির মাধ্যমে আপনি বিভিন্ন ধরনের যাচাই করতে পারেন। কিছু সাধারণ matcher নিচে বর্ণনা করা হলো:


1. toBe()

toBe() ব্যবহার করে আপনি একটি মানের সঠিকতা পরীক্ষা করতে পারেন। এটি strict equality চেক করে, অর্থাৎ, এটি দুটি মানের টাইপও পরীক্ষা করে।

expect(2 + 3).toBe(5);  // এটি পরীক্ষা করবে যে ২ এবং ৩ যোগ করলে ৫ হয় কিনা

এখানে:

  • toBe(5) চেক করবে যে ফলাফল 5 কিনা। এটি strict equality চেক করে, তাই 2 + 3 এর ফলাফল হতে হবে একেবারে 5, কোনো রকম পরিবর্তন ছাড়াই।

2. toEqual()

toEqual() ব্যবহার করে আপনি অবজেক্ট বা অ্যারের মানের সমতা পরীক্ষা করতে পারেন। এটি deep equality চেক করে, তাই এটি সাধারণত জটিল ডেটা টাইপের জন্য ব্যবহৃত হয়।

const obj1 = { a: 1, b: 2 };
const obj2 = { a: 1, b: 2 };

expect(obj1).toEqual(obj2);  // এটি পরীক্ষা করবে যে obj1 এবং obj2 এর মান সমান কিনা

এখানে:

  • toEqual() চেক করে যে obj1 এবং obj2 এর মধ্যে মানের সমতা রয়েছে, যদিও তাদের রেফারেন্স ভিন্ন হতে পারে।

3. toBeTruthy() এবং toBeFalsy()

toBeTruthy() এবং toBeFalsy() Matchers ব্যবহার করে আপনি কোনো মানের সত্য বা মিথ্যা অবস্থান পরীক্ষা করতে পারেন।

  • toBeTruthy() চেক করে যে মানটি truthy (যেমন, ১, "string", [1, 2] ইত্যাদি) কিনা।
  • toBeFalsy() চেক করে যে মানটি falsy (যেমন, false, 0, "", null, undefined) কিনা।
expect(true).toBeTruthy();  // এটি পাস হবে কারণ 'true' একটি truthy মান
expect(0).toBeFalsy();  // এটি পাস হবে কারণ '0' একটি falsy মান

4. toContain()

toContain() ব্যবহার করে আপনি যাচাই করতে পারেন যে একটি অ্যারে বা স্ট্রিং একটি নির্দিষ্ট উপাদান ধারণ করছে কি না।

const arr = [1, 2, 3, 4];

expect(arr).toContain(3);  // এটি পরীক্ষা করবে যে অ্যারে '3' ধারণ করছে কিনা
expect("Hello").toContain("ell");  // এটি পরীক্ষা করবে যে স্ট্রিং 'ell' ধারণ করছে কিনা

5. toBeGreaterThan() এবং toBeLessThan()

toBeGreaterThan() এবং toBeLessThan() Matchers ব্যবহার করে আপনি সংখ্যার তুলনা করতে পারেন।

expect(5).toBeGreaterThan(3);  // এটি পরীক্ষা করবে যে ৫, ৩ এর চেয়ে বড় কিনা
expect(2).toBeLessThan(10);  // এটি পরীক্ষা করবে যে ২, ১০ এর চেয়ে ছোট কিনা

6. toThrow()

toThrow() ব্যবহার করে আপনি যাচাই করতে পারেন যে একটি ফাংশন কোনো ত্রুটি (error) ছুঁড়ছে কিনা।

function throwError() {
  throw new Error("This is an error");
}

expect(throwError).toThrow();  // এটি পরীক্ষা করবে যে throwError ফাংশনটি কোনো ত্রুটি ছুঁড়ছে কিনা

Assertions এবং Matchers এর ব্যবহার উদাহরণ

describe("Mathematical operations", function() {
  it("should add two numbers correctly", function() {
    const sum = 2 + 3;
    expect(sum).toBe(5);  // পরীক্ষার জন্য 'toBe()' matcher
  });

  it("should return an object with same properties", function() {
    const obj1 = { a: 1, b: 2 };
    const obj2 = { a: 1, b: 2 };
    expect(obj1).toEqual(obj2);  // পরীক্ষার জন্য 'toEqual()' matcher
  });

  it("should return a truthy value", function() {
    expect(1).toBeTruthy();  // পরীক্ষার জন্য 'toBeTruthy()' matcher
  });

  it("should contain a specific element", function() {
    const arr = [1, 2, 3, 4];
    expect(arr).toContain(3);  // পরীক্ষার জন্য 'toContain()' matcher
  });

  it("should throw an error", function() {
    function throwError() {
      throw new Error("Error!");
    }
    expect(throwError).toThrow();  // পরীক্ষার জন্য 'toThrow()' matcher
  });
});

সারাংশ

JasmineJS এ Assertions এবং Matchers টেস্টের ফলাফল যাচাই করার প্রধান উপায়। expect() ফাংশনের মাধ্যমে Assertions তৈরি করা হয় এবং Matchers (যেমন toBe(), toEqual(), toContain(), toThrow()) এর মাধ্যমে আপনি বিভিন্ন ধরনের তুলনা এবং যাচাই করতে পারেন। Jasmine এর Matchers এর মাধ্যমে আপনি সহজেই বিভিন্ন ধরনের মান যাচাই করতে পারবেন, যেমন সংখ্যা, অবজেক্ট, অ্যারে, বা ত্রুটি।

Content added By
Promotion

Are you sure to start over?

Loading...